<?php

/* 
 * 使用mcrypt加密数据
 * 使用mcrypt模块，这个模块包含了超过30中加密方式来保证只有加密者才能解密数据
 * 
 * mcrypt函数需要以下信息：
 * 1、待加密数据
 * 2、用来加密和解密数据的key
 * 3、用户选择的加密数据的特定算法（cipher：如 MCRYPT_TWOFISH192,MCRYPT_SERPENT_256， MCRYPT_RC2, MCRYPT_DES, and MCRYPT_LOKI97）
 * 4、用来加密的模式
 * 5、加密的种子，用来起始加密过程的数据，是一个额外的二进制数据用来初始化加密算法
 * 6、加密key和种子的长度，使用mcrypt_get_key_size函数和mcrypt_get_block_size函数可以获取
 * 
 */
class mcrypt{
    public function encrypt($data,$key,$cipher,$mode) {  
        // Encrypt data
        return (string)
                    base64_encode
                        (
                        mcrypt_encrypt
                            (
                            $cipher,
                            substr(md5($key),0,mcrypt_get_key_size($cipher, $mode)),
                            $data,
                            $mode,
                            substr(md5($key),0,mcrypt_get_block_size($cipher, $mode))
                            )
                        );
    }
    public function decrypt($data,$key,$cipher, $mode) {
    // Decrypt data
        return (string)
                mcrypt_decrypt
                    (
                    $cipher,
                    substr(md5($key),0,mcrypt_get_key_size($cipher, $mode)),
                    base64_decode($data),
                    $mode,
                    substr(md5($key),0,mcrypt_get_block_size($cipher, $mode))
                    );
    }
}
/*
$data = "Stuff you want encrypted";
$key = "Secret passphrase used to encrypt your data";
$cipher = "tripledes";
$mode = "cfb";


$mcry=new mcrypt();
$encrypt = $mcry->encrypt($data,$key,$cipher, $mode);
echo "加密前：".$data."</br></br>";
echo "加密后：".$encrypt."</br></br>";
$decrypt = $mcry->decrypt($encrypt, $key, $cipher, $mode);
echo "解密后：".$decrypt;
 * 
 */
?>
